// 专用小仓库

import { reqShopCart, reqDeleteCart, reqUpdataChecked } from "@/api";

// 规范：利用vuex存储数据
import { SET_USERID } from '@/utils/USER_ID'

//任何的小仓库:state、mutations、actions、getters 
let state = {
    // vuex仓库存储用户临时身份
    USER_ID: SET_USERID(),
    shopCartInfo: []
};
let mutations = {
    GETSHOPCART(state, payload) {
        state.shopCartInfo = payload
    }
};
let actions = {
    async getShopCart({ commit, dispatch, state }) {
        let result = await reqShopCart();
        if (result.code == 200) {
            commit('GETSHOPCART', result.data)
        }
    },
    // 删除某一个商品的数据
    async deleteCartById({ commit, dispatch, state }, skuId) {
        let result = await reqDeleteCart(skuId)

        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject()
        }
    },
    // 修改某一个商品的勾选状态
    async changeChecked({ commit, dispatch, state }, { skuId, isChecked }) {
        let result = await reqUpdataChecked(skuId, isChecked)

        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject()
        }
    },
    // 修改全部商品的勾选状态
    updateAllChecked({ commit, dispatch, state },isChecked){
        let arr = [];
        // 获取购物车商品的个数 进行遍历
        state.shopCartInfo[0].cartInfoList.forEach(item=>{
            // 调用修改某一个商品的action
            let ps = dispatch('changeChecked',{skuId:item.skuId,isChecked})

            arr.push(ps)
        })
        // promise.all全真为真
        return Promise.all(arr)
    },

    // 删除选中的商品
    deleteAllCart({ commit, dispatch, state }){
        let arr = [];

        state.shopCartInfo[0].cartInfoList.forEach(item=>{
            // 商品的勾选状态是勾选的  发请求一个个删除
            if(item.isChecked == 1){
                let ps = dispatch('deleteCartById',item.skuId)

                arr.push(ps)
            }

            return Promise.all(arr)
        })

    }
};
let getters = {
    // 计算数组里面的第一个元素：对象
    CartInfo(state) {
        return state.shopCartInfo[0] || {};

    }
};


// 对外暴露一个对象
export default {
    state,
    mutations,
    actions,
    getters
}